package cn.jiedanba.cacert.common.ca.extension.domain;

import java.io.Serializable;
import java.math.BigInteger;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.cert.X509Certificate;
import java.util.Date;
import java.util.List;

import org.bouncycastle.asn1.x500.X500Name;

import lombok.Data;
import lombok.experimental.Accessors;

/**
 * 
 * 
 * @author dell
 *
 */
@Data
@Accessors(chain = true)
public class PkiCert implements Serializable {

	private static final long serialVersionUID = 1L;

	/**
	 * 是否是CA证书
	 */
	private boolean isCA;

	/**
	 * 使用者主题
	 */
	private X500Name subjectDN;

	/**
	 * 密钥用法
	 */
	private Integer[] usage;

	/**
	 * 密钥增加用法
	 */
	private String[] extendUsage;
	/**
	 * 证书序列号
	 */
	private BigInteger serialNumber;

	/**
	 * 证书有效开始时间
	 */
	private Date startTime;

	/**
	 * 证书有效截止时间
	 */
	private Date endTime;

	/**
	 * 使用者公钥
	 */
	private PublicKey subjectPublicKey;
	/**
	 * 颁发者私钥
	 */
	private PrivateKey issuerPrivateKey;
	/**
	 * 颁发者公钥
	 */
	private X509Certificate issuerCert;

	/**
	 * 证书签名算法
	 */
	private String signatureAlgorithm;

	/**
	 * 可选DNS Name
	 */
	private List<String> dnsNames;

	/**
	 * crl地址
	 */
	private String crl;

	/**
	 * crt地址
	 */
	private String crt;

	/**
	 * ocsp查询地址
	 */
	private String oscp;

	private List<String> ips;

	/**
	 * 证书策略
	 */
	private List<PkiCertPolicy> policyVos;

	/**
	 * 自定义属性
	 */
	private List<PkiCertCustomExtension> extensions;
}
